Test Driven Development (TDD) এবং MVVM Integration

Microsoft Technologies - এমভিভিএম (MVVM) Unit Testing এবং MVVM |
198
198

Test Driven Development (TDD) হল একটি সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়া যেখানে কোড লেখার আগে পরীক্ষাগুলি (tests) লেখা হয়। TDD-তে প্রথমে একটি পরীক্ষার কেস তৈরি করা হয়, তারপর সেই পরীক্ষাটি পাস করার জন্য কোড লেখা হয়। TDD এবং MVVM (Model-View-ViewModel) প্যাটার্নের সংমিশ্রণ অ্যাপ্লিকেশন ডেভেলপমেন্টে কার্যকারিতা, পরীক্ষাযোগ্যতা, এবং মডুলারিটি বৃদ্ধি করতে সাহায্য করে। MVVM প্যাটার্নের মধ্যে ViewModel অংশটি TDD-এর জন্য বিশেষভাবে উপযোগী, কারণ এটি ইউজার ইন্টারফেস (UI) থেকে বিচ্ছিন্ন থাকে এবং এটি সম্পূর্ণভাবে টেস্ট করা যেতে পারে।


Test Driven Development (TDD) প্রক্রিয়া

TDD একটি সাধারণ তিনটি ধাপের প্রক্রিয়া অনুসরণ করে:

  1. Red Phase – পরীক্ষাটি লেখা হয় এবং তা পাস না হওয়া পর্যন্ত রান করা হয়।
  2. Green Phase – কোড লেখা হয় যাতে পরীক্ষাটি পাস করে।
  3. Refactor Phase – কোডটি পুনরায় রিফ্যাক্টর করা হয়, এবং টেস্ট পুনরায় চালানো হয় যাতে আগের পরীক্ষাগুলির ফলাফল অপরিবর্তিত থাকে।

TDD প্রক্রিয়ায় পরীক্ষাগুলি সাধারণত ছোট, নির্দিষ্ট ফাংশনালিটি বা ইউনিটের জন্য লেখা হয় এবং তা ViewModel এবং Model এর লজিকাল অংশগুলির ওপর ফোকাস করা হয়, কারণ View অংশটি UI এর সাথে সম্পর্কিত হওয়ায় তা সাধারণত আলাদা টেস্টিং কৌশল প্রয়োজন।


MVVM এর সঙ্গে TDD ইন্টিগ্রেশন

MVVM প্যাটার্নে, ViewModel-এ থাকা লজিকটি খুবই গুরুত্বপূর্ণ কারণ এটি পুরোপুরি টেস্ট করা যায় এবং তা View থেকে বিচ্ছিন্ন থাকে। TDD এবং MVVM এর সংমিশ্রণে, ViewModel-এর সমস্ত লজিকের জন্য ইউনিট টেস্ট (Unit Test) লেখা হবে এবং Model এর ডেটা প্রসেসিং এবং ভ্যালিডেশন কার্যকলাপের জন্যও টেস্ট তৈরি করা যাবে।

1. ViewModel এর জন্য Unit Test তৈরি করা

ধরা যাক, আমাদের একটি LoginViewModel আছে, যেখানে ব্যবহারকারী একটি ইউজারনেম এবং পাসওয়ার্ড প্রদান করে এবং এই ডেটা যাচাই করা হয়। আমাদের TDD ব্যবহার করে প্রথমে পরীক্ষা তৈরি করতে হবে, তারপর সেই পরীক্ষার জন্য কোড লিখব।

Step 1: LoginViewModel এর জন্য Unit Test লেখা (Red Phase)
[TestClass]
public class LoginViewModelTests
{
    private LoginViewModel _viewModel;

    [TestInitialize]
    public void Setup()
    {
        _viewModel = new LoginViewModel();
    }

    [TestMethod]
    public void Login_WhenValidCredentialsProvided_ShouldReturnTrue()
    {
        // Arrange
        _viewModel.Username = "validUser";
        _viewModel.Password = "validPassword";

        // Act
        var result = _viewModel.LoginCommand.Execute(null);

        // Assert
        Assert.IsTrue(result);
    }

    [TestMethod]
    public void Login_WhenInvalidCredentialsProvided_ShouldReturnFalse()
    {
        // Arrange
        _viewModel.Username = "invalidUser";
        _viewModel.Password = "invalidPassword";

        // Act
        var result = _viewModel.LoginCommand.Execute(null);

        // Assert
        Assert.IsFalse(result);
    }
}

এখানে, প্রথমে LoginViewModel এ ডিফাইন করা LoginCommand এর কাজ পরীক্ষা করা হচ্ছে। Username এবং Password প্রোপার্টি পরিবর্তন করে, LoginCommand এর মাধ্যমে লগইন প্রসেস পরীক্ষা করা হচ্ছে।

Step 2: LoginViewModel কোড লেখা (Green Phase)

এখন, LoginViewModel-এ কোড লেখা হবে যাতে উপরের টেস্ট পাস করে।

public class LoginViewModel : INotifyPropertyChanged
{
    private string _username;
    private string _password;

    public string Username
    {
        get => _username;
        set
        {
            if (_username != value)
            {
                _username = value;
                OnPropertyChanged();
            }
        }
    }

    public string Password
    {
        get => _password;
        set
        {
            if (_password != value)
            {
                _password = value;
                OnPropertyChanged();
            }
        }
    }

    public ICommand LoginCommand { get; private set; }

    public LoginViewModel()
    {
        LoginCommand = new RelayCommand(ExecuteLogin);
    }

    private bool ExecuteLogin()
    {
        // Fake validation for simplicity
        return Username == "validUser" && Password == "validPassword";
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

এখন, আমাদের LoginViewModel সঠিকভাবে LoginCommand এর মাধ্যমে লগইন যাচাই করছে। এভাবে, TDD প্রক্রিয়া অনুসরণ করে আমরা ViewModel-এর লজিক তৈরি করেছি এবং পরীক্ষাগুলি লিখেছি যা পাস হচ্ছে।

Step 3: Refactor (Green Phase Complete)

কোড এবং টেস্ট পাস হলে, এরপর আমরা কোডটি রিফ্যাক্টর করতে পারি যাতে তা আরো পরিষ্কার এবং মেইনটেনেবল হয়। উদাহরণস্বরূপ, যদি ExecuteLogin মেথডের মধ্যে কোনো জটিলতা থাকে, তাহলে তা আলাদা কোনো সেবা বা রেপোজিটরি ক্লাসে সরিয়ে নেওয়া যেতে পারে।


TDD এবং MVVM এর উপকারিতা

  1. ডেটা লজিক পরীক্ষা: ViewModel-এ থাকা সমস্ত ডেটা লজিক সহজে পরীক্ষা করা যায়, যা View এর UI লজিক থেকে আলাদা থাকে। এতে ইউজার ইন্টারফেস সম্পর্কিত কোডের বাইরের কার্যক্রমগুলোর উপর ফোকাস রাখা যায়।
  2. টেস্টের মাধ্যমে কোড কোয়ালিটি বাড়ানো: TDD কোডের মান উন্নত করে এবং ছোট ছোট লজিকাল ইউনিট পরীক্ষা করার মাধ্যমে সফটওয়্যারের স্থিতিশীলতা নিশ্চিত করে।
  3. রিফ্যাক্টরিং সহজতর: পরীক্ষাগুলি থাকলে কোড রিফ্যাক্টর করার পরও পরীক্ষাগুলির মাধ্যমে নিশ্চিত হওয়া যায় যে পূর্বের কার্যক্রম ঠিকভাবে কাজ করছে।
  4. মডুলার এবং পুনঃব্যবহারযোগ্য কোড: TDD প্রক্রিয়া কোডকে মডুলার এবং পুনঃব্যবহারযোগ্য করে তোলে, কারণ কোডটি ছোট ছোট ইউনিটে ভাগ করা হয় যা সহজে টেস্ট এবং রিফ্যাক্টর করা যায়।

Conclusion

Test Driven Development (TDD) এবং MVVM প্যাটার্ন একসঙ্গে ব্যবহৃত হলে সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়া আরও কার্যকরী এবং মডুলার হয়। ViewModel অংশটি টেস্ট করার জন্য আদর্শ, কারণ এটি UI লজিক থেকে পৃথক থাকে এবং এতে থাকা লজিকের জন্য ইউনিট টেস্ট তৈরি করা যায়। TDD পদ্ধতিতে, কোড লেখার আগে টেস্ট তৈরি করা হয়, যা উন্নত কোড কোয়ালিটি, স্থিতিশীলতা, এবং সহজ রিফ্যাক্টরিং নিশ্চিত করে। TDD এবং MVVM এর একত্রিত ব্যবহারে সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়াটি আরো সুশৃঙ্খল এবং টেস্টযোগ্য হয়ে ওঠে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion